﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MIAP.Entidades;

namespace MIAP.DataAccess.Interfaces
{
    /// <summary>
    /// Contrato del DAO de procesos de PerfilesDao.
    /// </summary>
    public interface IPerfilesDao
    {
        /// <summary>
        /// Obtiene todos los perfiles.
        /// </summary>
        /// <returns>Lista con todos los perfiles.</returns>
        IList<PerfilInfo> GetPerfiles();

        /// <summary>
        /// Cambia el estatus del perfil a activo o inactivo.
        /// </summary>
        /// <param name="idPerfil">Es el id del perfil del cual se cambiará el estatus.</param>
        /// <param name="estatusRegistro">True (Activo), False (Inactivo)</param>
        void ChangeEstatusPerfil(int idPerfil, bool estatusRegistro);

        /// <summary>
        /// Obtiene la información de un determinado perfil.
        /// </summary>
        /// <param name="idPerfil">Es el id del perfil del que se desea obtener la informacion.</param>
        /// <returns>Información general del perfil.</returns>
        PerfilInfo GetPerfilById(int idPerfil);

        /// <summary>
        /// Obtiene los roles de un usuario.
        /// </summary>
        /// <param name="idUsuario">Es el id del usuario.</param>
        /// <returns>Lista de roles pertenecientes al usuario.</returns>
        IList<PerfilInfo> GetPerfilByIdUsuario(int idUsuario);

        /// <summary>
        /// Obtiene la información de un determinado perfil.
        /// </summary>
        /// <param name="idProyecto">Id del proyecto al que pertenece.</param>
        /// <param name="nombre">Es el nombre del perfil.</param>
        /// <param name="estaActivo">Si el perfil esta activo o no.</param>
        /// <returns>Información general del perfil.</returns>
        IList<PerfilInfo> GetPerfil(int? idProyecto, string nombre, bool? estaActivo);

        /// <summary>
        /// Obtiene todos los permisos ligados a un perfil.
        /// </summary>
        /// <param name="idPerfil">Id del perfil.</param>
        /// <returns>Lista de permisos ligados a un perfil.</returns>
        IList<PermisoInfo> GetPermisosByIdPerfil(int idPerfil);

        /// <summary>
        /// Agrega un nuevo perfil.
        /// </summary>
        /// <param name="perfil">Es el perfil que será agregado.</param>
        /// <param name="user">Usuario que esta ejecuando la operación.</param>
        void AddNewPerfil(PerfilInfo perfil, string user);

        /// <summary>
        /// Modifica la información de un perfil .
        /// </summary>
        /// <param name="perfil">Es el perfil al que se le modificará la información.</param>
        /// <param name="user">Usuario que esta ejecutando la operación.</param>
        void EditPerfil(PerfilInfo perfil, string user);

        /// <summary>
        /// Obtiene los perfiles existentes para un proyecto.
        /// </summary>
        /// <returns>Lista con el id y el nombre de los perfiles.</returns>
        IList<CatalogoInfo> GetCatalogPerfiles(int? idProyecto);

        /// <summary>
        /// Verifica la existencia de un perfil.
        /// </summary>
        /// <param name="nombrePerfil">Es el nombre del perfil.</param>
        /// <returns>Indicador de si el perfil existe o no.</returns>
        bool VerifyExistPerfil(string nombrePerfil);
    }
}
